// pages/my/address/add/add.js
const call = require('../../../utils/request.js')
const adrParse = require('../../../utils/addressParse.js')
const app = getApp()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    isNew: true, //判断地址显示数据还是默认值提示语
    id:null, //判断是修改还是新增
    adrArr:[], //地区的下拉数据
    adrValue:[0,0,0],
    addressZN:'', //智能地址栏
    hideZNOprate: true, //是否显示只能地址
    showModalStatus: false, //是否显示弹窗
    tipObj:['','家','公司','学校'], //自定义标签
    tipIndex: 0, //标签索引
    adrTip:'', 
    adrTipIndex:0, //最终确定的标签索引
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    const id = options.id || null;
    this.setData({
      id: id
    })

    // 存在id则获取地址信息
    if(id){
      this.getAddress();
    }else{
      this.getAddressList();
    }

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },

  /**
   * 设置默认地址
   */
  changeDefault(){
    this.setData({
      is_default: !this.data.is_default
    })
  },

  /**
   * input值修改
   */
  bindchange(e){
    const name = e.currentTarget.dataset.name;
    let value = e.detail.value;
    // if(name == "phone"){
    //   value = value.replace(/[^/d]/g, '');
    //   console.log(value)
    // }
    this.setData({
      [`${name}`]: value
    })
  },

  /**
   * 删除地址
   */
  delAdr(){
    wx.showModal({
      content:'确认删除地址？',
      success:(res)=>{
        if(res.confirm){
          const id = this.data.id;
          call.post('/api/home/delete_address',{id}).then(res=>{
            console.log("删除地址",res)
            if(res.data.code == 0){
              let t = getCurrentPages()[getCurrentPages().length - 2] 
              t.getList();
              wx.navigateBack({
                delta: 1,
              })
            }
          })
        }
      }
    })
    
  },

  /**
   * 保存地址信息
   */
  save(){
    const list = this.data.list;
    const adrValue = this.data.adrValue;
    const adrArr = this.data.adrArr;
    let data = {
      consignee:this.data.consignee,
      phone:this.data.phone,
      province_id: list[adrValue[0]].id,
      city_id: list[adrValue[0]].son[adrValue[1]].id,
      region_id: list[adrValue[0]].son[adrValue[1]].son[adrValue[2]].id,
      area_name: `${adrArr[0][adrValue[0]]}${adrArr[1][adrValue[1]]}${adrArr[2][adrValue[2]]}`,
      address: this.data.address,
      is_default:this.data.is_default?1:0,
      tag:this.data.tipObj[this.data.adrTipIndex],
    };
    let url = '/api/home/add_address';
    if(this.data.id){
      data = Object.assign(data,{
        id:this.data.id
      })
      url = '/api/home/update_address';
    }
    console.log(data)
    if(!data.consignee || !data.phone || !data.address){
      wx.showToast({
        title: '请完善地址信息',
        icon: 'none'
      })
      return;
    }
    wx.showLoading({
      title: '正在保存',
      mask:true
    })
    call.post(url,data).then(res=>{
      wx.hideLoading();
      console.log("保存地址",res)
      if(res.data.code == 0){
        let t = getCurrentPages()[getCurrentPages().length - 2] 
        t.setData({
          pageIndex:1
        })
        t.getList();
        wx.navigateBack({
          delta: 1,
        })
      }
    })
  },

  /**
   * 获取地址信息
   */
  getAddress(){
    wx.showLoading({
      title: '正在获取数据',
      mask:true
    })
    call.post('/api/home/get_address',{id:this.data.id}).then(res=>{
      wx.hideLoading();
      console.log("获取地址信息",res)
      let data = res.data.data;
      if(res.statusCode == 200){
        //获取标签
        const tipArr = this.data.tipObj;
        let index = tipArr.indexOf(data.tag);
        let adrTip = '';
        if(index==-1){
          index = 0;
          adrTip = data.tag;
        }

        this.setData({
          consignee:data.consignee,
          phone:data.phone,
          province:{id:data.province_id,name:data.province_name},
          city:{id:data.city_id,name:data.city_name},
          region:{id:data.region_id,name:data.region_name},
          address:data.address,
          is_default:data.is_default?true:false,
          ['tipObj[0]']:adrTip,
          adrTipIndex:index,
          tipIndex:index
        })
      }
      this.getAddressList();
    })
  },

  /**
   * 获取地址下拉信息
   */
  getAddressList(){
    wx.showLoading({
      title: '正在获取数据',
      mask:true
    })
    call.get('/api/home/get_area').then(res=>{
      wx.hideLoading();
      console.log("获取地址下拉信息",res)
      const data = res.data.data;
      //获取默认第一个
      // console.log(arr)
      //实例化省市县数组
      adrParse.parseArea(data)
      this.setData({
        list:data,
        // adrArr:arr
      });
      this.getDefAdr();
    })
  },

  /**
   * 获取默认地址项 
   */
  getDefAdr(){
    const id = this.data.id;
    const province = this.data.province;
    const city = this.data.city;
    const region = this.data.region;
    const data = this.data.list;
    let adrArr = [[],[],[]]; //地址列表
    let adrValue = [0,0,0]; //地址索引

    if(id){ //存在id，获取当前地址索引
      for(let i in data){
        if(data[i].id == province.id){
          adrValue[0] = i;
          for(let y in data[i].son){
            if(data[i].son[y].id == city.id){
              adrValue[1] = y;
              for(let z in data[i].son[y].son){
                if(data[i].son[y].son[z].id == region.id){
                  adrValue[2] = z;
                }
              }
            }
          }
        }
      }
    }
    for(let i of data){
      adrArr[0].push(i.name);
    }
    for(let y of data[adrValue[0]].son){
      adrArr[1].push(y.name)
    }
    for(let z of data[adrValue[0]].son[adrValue[1]].son){
      adrArr[2].push(z.name)
    }
    this.setData({
      adrArr,
      adrValue
    })
  },

  /**
   * 地址联动获取数据
   */
  changeAdr(e){
    const column = e.detail.column;
    const value = parseInt(e.detail.value);

    if(column == 2){
      this.setData({
        [`adrValue[2]`]: value,
        isNew:false
      })
    }else {
      let arr = [];
      let data = this.data.list[value].son;
      if(column == 0){
        for(let i of data){
          arr.push(i.name)
        }
        this.setData({
          [`adrValue[0]`]: value,
          [`adrArr[1]`]:arr,
          isNew:false
        })
        this.getArea(0);
      }else if(column==1){
        this.getArea(value);
      }
    }
  },
  getArea(key2){
    let key1 = this.data.adrValue[0];
    const arr1 = this.data.adrArr[1];
    const data = this.data.list[key1].son[key2].son;
    let arr = [];

    if(arr1.length>0){ 
      for(let i of data){
        arr.push(i.name)
      }
    }
    
    this.setData({
      [`adrValue[1]`]: key2,
      [`adrArr[2]`]:arr,
      isNew:false
    })
  },

  /**
   * 粘贴
   */
  paste(){
    wx.getClipboardData({
      success:(res)=>{
        this.setData({
          addressZN: res.data
        })
      }
    })
  },

  /**
   * 识别
   */
  discern(){
    let data = this.data.list;
    let address = this.data.addressZN;
    if(address.trim() == ""){
      wx.showToast({
        title: '无法识别',
        icon:'none'
      })
      return;
    }
    var a = adrParse.parse(address);
    console.log("哇哦，此处进入判定了哟",a)
    let newArr2=[],newArr3=[];
    if(a.provinceIndex){ //判断是否存在索引
      const arr2 = data[a.provinceIndex].son;
      const arr3 = data[a.provinceIndex].son[a.cityIndex].son;
      
      arr2.forEach(res=>{
        newArr2.push(res.name);
      })
      arr3.forEach(res=>{
        newArr3.push(res.name);
      })
      let obj = {
        isNew:false,
        address:a.addr,
        [`adrArr[1]`]:newArr2,
        [`adrArr[2]`]:newArr3,
        adrValue:[a.provinceIndex,a.cityIndex,a.areaIndex],
        addressZN:''
      }
      if(a.name){
        obj = Object.assign(obj,{consignee:a.name})
      }
      if(a.mobile){
        obj = Object.assign(obj,{phone:a.mobile})
      }
      this.setData(obj)
    }else{
      wx.showToast({
        title: '识别失败',
        icon: 'none'
      })
    }
    
    // for()
    // return;
    // let arr = address.split('，');
    // let data = {};
    // let adrArr = [];

    // for(let i in arr){
    //   //名称
    //   if(i == 0 && isNaN(parseInt(arr[i])) && arr[i].indexOf(' ')==-1 && arr[i].indexOf("省")==-1&& arr[i].indexOf("市")==-1&& arr[i].indexOf("区")==-1&& arr[i].indexOf("省")==-1&& arr[i].indexOf("县")==-1){
    //     data = Object.assign(data,{consignee:arr[i]})
    //   }
    //   //电话
    //   else if(parseInt(arr[i])>0 && arr[i].toString().length == 11){
    //     data = Object.assign(data,{phone:arr[i]})
    //   }
    //   //地址
    //   else if(arr[i].indexOf(' ')>-1 || arr[i].indexOf("省")>-1|| arr[i].indexOf("市")>-1|| arr[i].indexOf("区")>-1|| arr[i].indexOf("省")>-1|| arr[i].indexOf("县")>-1){
    //     const listArr = this.data.list;
    //     let newArr = []; //当前获取到的索引
    //     let arr1 = [];

    //     if(arr[i].indexOf(' ')>-1){
    //       arr1 = arr[i].split(' ');
    //       console.log("有空格",arr1)
    //     }else{
    //       let pro = arr[i].split('省');
    //       let city = null,area = null,xian=null;

    //       //省获取
    //       if(pro.length == 2){
    //         arr1.push(pro[0])
    //         city = pro[1].split('市');
    //       }else{
    //         city = pro[0].split('市');
    //       }
          
    //       //城市获取
    //       if(city.length == 2){
    //         arr1.push(city[0])
    //         area = city[1].split('区');
    //       }else{
    //         area = city[0].split('区');
    //       }
          
    //       //区获取
    //       if(area.length == 2){
    //         arr1.push(area[0])
    //         xian = area[1].split('区');
    //       }else{
    //         xian = area[0].split('区');
    //       }
          
    //       //县获取和详细地址获取
    //       if(xian.length == 2){
    //         arr1.push(xian[0])
    //         data = Object.assign(data,{address:xian[1]})
    //       }else{
    //         data = Object.assign(data,{address:xian[0]})
    //       }
    //     }

    //     for(let y in arr1){
    //       if(arr1[y].trim().length>0){
    //         newArr = this.findOffset(listArr,arr1[y]);
    //         adrArr = newArr.length>adrArr.length?newArr:adrArr; //获取最大长度的索引值
    //       }
    //       //最后一位
    //       if(y == (arr1.length-1) && typeof(data.address)=="undefined"){
    //         data = Object.assign(data,{address:arr1[y]})
    //       }
    //     }
    //     for(let z=1;z<4;z++){
    //       if(adrArr.length<z){
    //         adrArr.push(0)
    //       }
    //     }
    //     let arr2 = [],arr3=[];
    //     for(let t1 of listArr[adrArr[0]].son){
    //       arr2.push(t1.name)
    //     }
    //     for(let t2 of listArr[adrArr[0]].son[adrArr[1]].son){
    //       arr3.push(t2.name)
    //     }

    //     data = Object.assign(data,{
    //       adrValue:adrArr,
    //       [`adrArr[1]`]:arr2,
    //       [`adrArr[2]`]:arr3,
    //       addressZN:''
    //     })
    //     console.log("获取最终的数据",adrArr)
    //   }
    // }
    // if(JSON.stringify(data)=='{}'){
    //   wx.showToast({
    //     title: '无法识别',
    //     icon:'none'
    //   })
    //   data = {
    //     addressZN:''
    //   }
    // }
    // this.setData(data)
  },

  /**
   * 多维数组中获取对应的索引
   */
  findOffset(arr, val, position) {
    var res = '';
    function _find (arr, val, position) {
        var temp = '';
        arr.forEach((item, index) => {
            temp = position ? position + ',' + index : index;
            if (item.name.indexOf(val)>-1) {
                res = temp;
                return;
            } else if (item.son) {
                temp = _find(item.son, val, temp);
            }
        })
    }
    _find(arr, val, position);
    
    if(res.toString().length == 0){
      return [0];
    }else{
      return res.toString().split(',');
    }
  },

  /**
   * 智能填写栏的显示和隐藏
   */
  showOprate(){
    let hideEle = this.data.hideZNOprate;
    this.setData({
      hideZNOprate:!hideEle
    })
  },

  //显示规格弹窗
  showModal (e) {
    const adrTipIndex = this.data.adrTipIndex;
    if(this.data.tipIndex != adrTipIndex){
      this.setData({
        tipIndex:adrTipIndex
      })
    }
    // 显示遮罩层
    var animation = wx.createAnimation({
      duration: 200,
      timingFunction: "linear",
      delay: 0
    })
    this.animation = animation
    animation.translateY(723).step()
    this.setData({
      animationData: animation.export(),
      showModalStatus: true
    })
    setTimeout(function () {
      animation.translateY(0).step()
      this.setData({
        animationData: animation.export()
      })
    }.bind(this), 200)
  },

  //隐藏规格弹窗
  hideModal (e) {
    const type = e.currentTarget.dataset.type;
    if(type == "sure"){
      this.setData({
        adrTipIndex: this.data.tipIndex
      })
    }
    // 隐藏遮罩层
    var animation = wx.createAnimation({
      duration: 200,
      timingFunction: "linear",
      delay: 0
    })
    this.animation = animation
    animation.translateY(300).step()
    this.setData({
      animationData: animation.export(),
    })
    setTimeout(function () {
      animation.translateY(0).step()
      this.setData({
        animationData: animation.export(),
        showModalStatus: false
      })
    }.bind(this), 200)
  },

  /**
   * 选择地址标签 
   */
  chooseTip(e){
    const index = e.currentTarget.dataset.index;
    this.setData({
      tipIndex: index
    })
  },

  //定位，获取当前经纬度
  getLocation(e){
    wx.getLocation({
      type: 'gcj02',
      success: (res)=> {
        let latitude = res.latitude
        let longitude = res.longitude
        app.globalData.lat = res.latitude;//
        app.globalData.lng = res.longitude;//把onload定位时候的经纬度存到全局
        wx.chooseLocation({
          latitude: res.latitude,
          longitude:res.longitude,
          success:res=>{
            console.log(res)
            this.setData({
              addressZN:res.address+res.name,
              isNew:false
            })
            this.discern();
          }
        })
      },
      fail: function (res) {
        console.log('fail' + JSON.stringify(res))
      }
    })
  },
})